﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Entersoft.Data.DotNetDAL.SQL;

namespace BLL
{
    public class Pasillos: Common
    {
        public static IList<Pasillo> ObtenerPasillos(ref string Mensaje)
        {
            return ObtenerPasillos(null, ref Mensaje);
        }

        public static IList<Pasillo> ObtenerPasillos(int? BodegaId, ref string Mensaje)
        {
            var retorno = new List<Pasillo>();

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "SP_GET_PASILLOS" };

            using (var objConn = new Persistence(false, ConnDB))
            {
                objRP.AddParametro(BodegaId);

                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                {
                    if (objRP.DataTable != null)
                        foreach (DataRow row in objRP.DataTable.Rows)
                            retorno.Add(new Pasillo(row["Pasillo"].ToString(), row["Bodega"].ToString(), Convert.ToInt16(row["Estado"])));
                }
                else
                    Mensaje = objRP.Errores;
            }

            objRP.Dispose();

            return retorno;
        }

        public static bool Eliminar(string PasillloId, int BodegaId, ref string Mensaje)
        {
            var retorno = false;

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "sp_del_Pasillo" };

            objRP.AddParametro(PasillloId);
            objRP.AddParametro(BodegaId);

            using (var objConn = new Persistence(true, ConnDB))
            {
                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                {
                    if (objRP.DataTable != null)
                    {
                        retorno = objRP.DataTable.Rows[0][0].Equals(0);
                        Mensaje = objRP.DataTable.Rows[0][1].ToString();
                    }

                    if (retorno)
                        objConn.Commit();
                }
                else
                    Mensaje = objRP.Errores;
            }

            objRP.Dispose();

            return retorno;
        }

        public static bool Grabar(string PasillloId, int BodegaId, int EstadoId, ref string Mensaje)
        {
            var retorno = false;

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "sp_ins_Pasillo" };

            objRP.AddParametro(PasillloId);
            objRP.AddParametro(BodegaId);
            objRP.AddParametro(EstadoId);

            using (var objConn = new Persistence(true, ConnDB))
            {
                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                {
                    if (objRP.DataTable != null)
                    {
                        retorno = objRP.DataTable.Rows[0][0].Equals(0);
                        Mensaje = objRP.DataTable.Rows[0][1].ToString();
                    }

                    if (retorno)
                        objConn.Commit();
                }
                else
                    Mensaje = objRP.Errores;
            }

            objRP.Dispose();

            return retorno;
        }
    }

    [Serializable]
    public class Pasillo
    {
        [EditorBrowsable(EditorBrowsableState.Never)]
        private string mPasilloId;

        [EditorBrowsable(EditorBrowsableState.Never)]
        private readonly int mBodegasId;

        [EditorBrowsable(EditorBrowsableState.Never)] 
        private readonly int mEstadoId;

        public Pasillo(string PasilloId, int BodegasId, int EstadoId)
        {
            mPasilloId = PasilloId;
            mBodegasId = BodegasId;
            mEstadoId = EstadoId;
        }

        public Pasillo(string PasilloId, string Bodega, int EstadoId)
        {
            mPasilloId = PasilloId;
            mBodegasId = Bodegas.ObtenerBodega(Bodega).BodegasId;
            mEstadoId = EstadoId;
        }

        public string PasilloId
        {
            get { return mPasilloId; }
            set { mPasilloId = value; }
        }

        public Bodega Bodega
        {
            get
            {
                return Bodegas.ObtenerBodega(mBodegasId);
            }
        }

        public string Estado
        {
            get
            {
                string retorno = null;

                foreach(var tmpEstado in Estados.ObtenerEstados("tbl_pasillos"))
                    if (tmpEstado.EstadoId == mEstadoId)
                    {
                        retorno = tmpEstado.Glosa;
                        break;
                    }

                return retorno;
            }
        }
    }
}
